/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package spaceinvaders.interfacegrafica;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
import javax.swing.JFrame;
import spaceinvaders.sistema.Comandos;
import spaceinvaders.sistema.Sistema;

/**
 * Classe responsavel pela criacao da janela (JFrame) na qual o jogo é executado.
 * Esta classe também é responsavel pela captura dos comandos do teclado.
 * A interpretacao desses comandos é feita pela classe Comandos.
 * @author Danilo Augusto Silva
 */
public class JanelaPrincipal extends JFrame implements KeyListener {

    /**
     * Construtor da classe JanelaPrincipal, inicia a janela, adequando ao propósito
     * do jogo.
     */
    
    public JanelaPrincipal() {
        this.setTitle("dw Space Invaders");
        this.setDefaultCloseOperation(JanelaPrincipal.EXIT_ON_CLOSE);
        
        this.setResizable(false); //Nao pode modificar o tamanho da janela!
        this.setIcon();

        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

        Container contentPane = getContentPane();

        //Tamanho da Janela:
        this.setSize(600, 600);

        //Localizacao da janela:
        this.centralizarComponente();

        this.sistema = new Sistema();
        this.sistema.inicializar();
        this.getContentPane().add(sistema);
        Comandos comandos = new Comandos(this);
    }

    /**
     * Método que centraliza a janela.
     */

    private void centralizarComponente() {
        Dimension ds = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension dw = this.getSize();
        setLocation((ds.width - dw.width) / 2, (ds.height - dw.height) / 2);
    }

    /**
     * Método que coloca o ícone do space invaders como default da janela.
     */

    private void setIcon() {
        Image image;
        String filename = "/images/icon.png";
        URL url = JanelaPrincipal.class.getResource(filename);
        image = Toolkit.getDefaultToolkit().getImage(url);

        this.setIconImage(image);

    }

    /**
     * Nada feito, pois queremos apenas quando o botao é pressionado e quando é
     * solto.
     * @param e = evento de teclado.
     */


    public void keyTyped(KeyEvent e) { //nada aqui
    }

    /**
     * Verifica se as setas, ou enter ou barra de espaco foi pressionado, caso
     * positivo avisa a classe Comandos que toma conta da acao.
     * @param e = evento de teclado
     */

    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_ENTER){
            if (Comandos.isPaused())
            Comandos.setPause(false);
            else Comandos.setPause(true);
        }
        if(e.getKeyCode() == KeyEvent.VK_UP) {
            Comandos.setUpKey(true);
        } else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
            Comandos.setDownKey(true);
        } else

        if(e.getKeyCode() == KeyEvent.VK_LEFT) {
            Comandos.setLeftKey(true);
        } else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
            Comandos.setRightKey(true);
        } else if (e.getKeyCode() == KeyEvent.VK_SPACE){
            Comandos.setFireKey(true);
        }
    }

    /**
     * Verifica se as setas, ou enter ou barra de espaco foi solto, caso
     * positivo avisa a classe Comandos que toma conta da acao.
     * @param e = evento de teclado.
     */

    public void keyReleased(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_UP) {
            Comandos.setUpKey(false);
        } else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
            Comandos.setDownKey(false);
        } else

        if(e.getKeyCode() == KeyEvent.VK_LEFT) {
            Comandos.setLeftKey(false);
        } else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
            Comandos.setRightKey(false);
        } else if (e.getKeyCode() == KeyEvent.VK_SPACE){
            Comandos.setFireKey(false);
        }
    }
    
    private Sistema sistema;

}
